/**
 * 检查地理位置权限状态
 */
window.checkLocationPermission = async function() {
    console.log('🔍 开始检查地理位置权限状态...');
    
    if (!navigator.permissions) {
        console.warn('浏览器不支持Permissions API');
        return 'unknown';
    }
    
    try {
        const permission = await navigator.permissions.query({name: 'geolocation'});
        console.log(`📋 权限状态: ${permission.state}`);
        return permission.state; // 'granted', 'denied', 'prompt'
    } catch (error) {
        console.warn('无法检查位置权限:', error);
        return 'unknown';
    }
};

/**
 * 重置地理位置权限（用于调试）
 */
window.resetLocationPermission = function() {
    // 清除位置缓存
    if ('geolocation' in navigator) {
        console.log('🔄 尝试重置位置权限缓存...');
        // 注意：浏览器通常不允许通过JS重置权限，只能提示用户手动操作
        return true;
    }
    return false;
};

/**
 * 检查当前环境和权限状态
 */
window.diagnoseLocationIssue = async function() {
    const diagnosis = {
        timestamp: new Date().toISOString(),
        userAgent: navigator.userAgent,
        isSecureContext: window.isSecureContext,
        hostname: location.hostname,
        protocol: location.protocol,
        geolocationSupported: 'geolocation' in navigator,
        permissionsSupported: 'permissions' in navigator,
        permissionState: 'unknown'
    };
    
    // 检查权限状态
    if (navigator.permissions) {
        try {
            const permission = await navigator.permissions.query({name: 'geolocation'});
            diagnosis.permissionState = permission.state;
        } catch (error) {
            diagnosis.permissionError = error.message;
        }
    }
    
    console.log('🔬 位置功能诊断结果:', diagnosis);
    return diagnosis;
};

/**
 * 获取用户地理位置
 * @returns {Promise<{latitude: number, longitude: number}>} 位置坐标
 */
window.getUserLocation = function () {
    return new Promise((resolve, reject) => {
        // 检查地理位置API支持
        if (!navigator.geolocation) {
            console.warn('浏览器不支持地理位置功能');
            reject(new Error('浏览器不支持地理位置功能'));
            return;
        }

        // 记录环境信息
        console.log(`🌐 当前环境: ${location.protocol}//${location.hostname}`);
        console.log(`🔒 安全上下文: ${window.isSecureContext}`);
        
        // 检查是否为安全上下文（HTTPS或localhost）
        if (!window.isSecureContext && location.hostname !== 'localhost' && location.hostname !== '127.0.0.1') {
            console.warn('⚠️ 地理位置API需要HTTPS环境或localhost');
            
            // 在HTTP环境下，某些浏览器仍然可能允许位置请求，所以我们继续尝试
            console.log('🔄 尝试在非安全上下文中获取位置（部分浏览器可能支持）...');
        }

        const options = {
            enableHighAccuracy: false, // 降低精度要求，提高成功率
            timeout: 15000,           // 15秒超时
            maximumAge: 0             // 不使用缓存，强制重新请求权限
        };

        console.log('🚀 开始获取地理位置...');
        console.log('⚙️ 配置选项:', options);
        
        navigator.geolocation.getCurrentPosition(
            (position) => {
                const lat = position.coords.latitude;
                const lng = position.coords.longitude;
                
                console.log(`获取位置成功: ${lat}, ${lng}`);
                
                // 验证坐标合理性
                if (lat === 0 && lng === 0) {
                    reject(new Error('获取到无效的位置坐标'));
                    return;
                }
                
                resolve({
                    latitude: lat,
                    longitude: lng
                });
            },
            (error) => {
                let message = '获取位置失败: ';
                console.error('地理位置错误:', error);
                
                switch (error.code) {
                    case error.PERMISSION_DENIED:
                        message += '用户拒绝了位置请求，请在浏览器设置中允许位置权限';
                        break;
                    case error.POSITION_UNAVAILABLE:
                        message += '位置信息不可用，请检查GPS或网络连接';
                        break;
                    case error.TIMEOUT:
                        message += '位置请求超时，请重试';
                        break;
                    default:
                        message += `未知错误 (代码: ${error.code})`;
                        break;
                }
                reject(new Error(message));
            },
            options
        );
    });
}; 